#ifndef DECODER_H
#define DECODER_H

#include <QThread>
#include <QDebug>
#include <QImage>


extern "C"
{
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"
    #include "libswscale/swscale.h"
    #include "libavdevice/avdevice.h"
    #include "libswresample/swresample.h"
    #include "libavutil/imgutils.h"
}

//解码类
class Rtsp_Decoder : public QObject
{
    Q_OBJECT
private:
    AVFormatContext* formatContext = nullptr;
    AVCodecContext* codecContext = nullptr;
    AVStream* videoStream = nullptr;
    SwsContext* swsContext = nullptr;
    QThread* decodingThread;

    // bool isRunning = false;

    QImage avframeToQImage(const AVFrame *frame);//将AVFrame格式转换为QImage格式
public:
    Rtsp_Decoder();
    ~Rtsp_Decoder();

    bool open(const std::string& url); // 打开RTSP流并初始化解码器。
    void close(); // 关闭RTSP流
    void decode(); // 解码循环,用于读取RTSP流中的数据包，并解码它们。

    void startDecoding();//添加一个函数来启动解码器
    void stopDecoding();//添加一个函数来停止解码器
//信号
signals:
    void frameReady(AVFrame* frame); // 当有帧被解码时发出信号   
    void frameReady(const QImage& frame);//添加一个新的信号，用于发送 QImage
//槽
private slots:
    void onFrameReady(AVFrame* frame);//添加槽函数来处理解码后的帧

};


#endif